这个算法在一个强大的backbone——EfficientNet下,在COCO测试集上取得了state-of-the-art的性能,下面对它的方法进行介绍。
创新点
- 提出了一个加权双向特征金字塔网络——weighted bi-directional feature pyramid network (BiFPN),能够实现简单且快速的多尺度特征融合
- 提出了一个用于目标检测模型的compound scaling method,能够同时统一scale backbone、特征网络、box/class预测网络的宽度、深度和分辨率
- 基于EfficientNet和上面两条改进,提出了一个新的目标检测家族——EfficientDet,在资源限制范围内,能够取得比现有模型都高的精度。其中,EfficientDet-D7在COCO测试集上取得了state-of-the-art的精度,并且比之前的检测网络参数量少了4倍到9倍,FLOPs少了13倍到42倍。
创新点来源
大多数现有的目标检测网络只关注一个特定的或者很少范围的资源要求,但是真实世界中,从手机到数据中心会要求不同的资源限制。那么是否有可能构建一个覆盖各种资源限制的、同时具有更高精度和更高效率的目标检测体系结构?本文通过系统的研究目标检测结构的不同设计选择解决这个问题。
One-stage目标检测的框架主要包含三个部分——backbone、特征融合(feature fusion)、class/box网络。这个框架主要有两个挑战。
- 有效的进行多尺度特征融合。FPN被广泛的应用到多尺度特征融合,但是在融合不同尺度的特征时,现有的方法只是很简单将不同尺度特征相加。但是,不同尺度的特征分辨率不同,对最终融合出的特征贡献通常不同。基于此,作者提出一个简单但有效的加权双向特征金字塔网络BiFPN,引入可训练参数学习不同特征的重要性。
- model scale。之前的工作都是通过使用更大的backbone或者更大的图像输入尺寸来获得更高的精度。但是作者观察到scaling up特征网络和box/class网络对于提高精度和性能也很重要。受到EfficientNet的启发,作者提出了一个用于目标检测的compound scaling method,同时统一scale backbone、特征网络、box/class预测网络的宽度、深度和分辨率。
BiFPN
问题定义
给定一组多尺度特征$\vec{P}^{in}=\left(P_{l_1}^{in},P_{l_2}^{in},\cdots \right)$,其中$P_{l_i}^{in}$表示第$l_i$层的特征。我们的目标是找到一个变换$f$能够有效的聚合不同的特征,输出新的一组特征$\vec{P}^{out} = f\left( \vec{P}^{in} \right)$。例如图2(a)所示,它是一个经典的top-down FPN结构,此时有$\vec{P}^{in}=\left(P_3^{in},\cdots,P_7^{in} \right)$,其中$P_i^{in}$表示$1/2^i$输入图像大小的特征图。例如,当输入大小为$640\times 640$时,level 3特征图$P_3^{in}$大小为$640/2^3=80$,level 7特征图$P_7^{in}$大小为$5\times 5$。经典的FPN以top-down形式聚合多尺度特征的方式可以用下面方程表示:
其中,Resize通常是一个上采样或者下采样操作,使得分辨率对齐。
Cross-Scale Connections
经典的FPN结构只是以top-down的形式融合不同尺度的特征,受到信息单向流动的限制。为了解决这个问题,PANet添加了一个额外的bottom-up融合分支,如图2(b)所示。最近的NAS-FPN使用神经网络搜索的方式搜索出一个更好cross-scale feature network的技巧,如图2(c)所示,但是这需要几千个GPU hours,并且搜出来的网络是非常规的、难以解释和修改的。
如表5所示,对这三种网络的性能进行分析,发现PANet结构比FPN结构和NAS-FPN结构能够获得更好的精度,但是参数量和计算量也相应最多。
接着,作者对PANet的结构进行改进,主要提出了一下三种改进方式:
如果一个节点只有一条输入边而没有进行特征融合,那么它对以融合不同特征为目的的特征网络的贡献就会较小。所以删除只有一条输入边的节点。
为了在不增加运算量的情况下融合更多的特征,若两个节点在同一个level,那么添加一个从原始节点到输出节点的边。
不像PANet只有一条top-down和down-up路径,作者将这种双向结构(top-down & down-up)视为一个feature network layer,如图2(d)所示。并将这种layer重复多次以能够更多的进行特征融合,如下图所示:
Weighted Feature Fusion
在融合不同尺度的特征时,现有的方法只是很简单将不同尺度特征resize到同一个尺度然后相加。但是,不同尺度的特征分辨率不同,对最终融合出的特征贡献通常不同。为了解决这个问题,作者针对每一个输入都添加一个可学习参数,让网络学习每一个输入特征的重要性。基于这个想法,考虑如下三种加权融合方法:
Unbounded fusion: $O=\sum_i w_i \cdot I_i$,其中$w_i$可以是一个标量(每个特征对应一个权重)、一个向量(特征中每一个通道都对应一个权重)、一个多维tensor(特征中的每一个点都对应一个权重)。作者发现使用标量时也能取得和另外两种相当的精度,且计算量最小。但是,这样的标量权重是没有边界的,在训练过程中可能导致不稳定。因此作者将所有的权重进行归一化来解决这个问题。
Softmax-based fusion: $O=\sum_i \frac{e^{w_i}}{\sum_j e^{w_j}}\cdot I_i$。很直观的一种方法是使用softmax函数将所有的权重归一化到0~1之间。但是,根据作者的研究,softmax函数会严重拖慢GPU速度(下面会介绍)。为了减轻这种时间消耗,作者提出了一个quick fusion方法。
Fast normalized fusion: $O=\sum_i \frac{w_i}{\epsilon + \sum_j w_j}\cdot I_i$。其中,将Relu函数作用于$w_i$,保证$w_i \geq 0$;$\epsilon=0.0001$避免数值不稳定。通过这种方法,所有的权重都会落到0~1之间,但是因为没有softmax操作,所以更加高效。之后的实验表明,这种方法能够取得和softmax-based fusion方式相近的性能,但是在GPU上快了30%。
将bidirectional crossscale connections和fast normalized fusion结合到一块,即可得到最终的BiFPN结构。例如,在图2(d)中level 6的特征融合公式为:
其中,$P_6^{td}$为level 6 top-down路径的中间特征,而$P_6^{out}$表示level 6 bottom-up路径的输出特征。
值得注意的是,作者使用了深度可分离卷积来进行特征融合,并在每一个卷积层后加了BN层和激励层,来进一步提高效率。
EfficientDet
EfficientDet Architecture
图3展示了EfficientDet的整体结构,它采用了One-Stage目标检测的框架。我们使用EfficientNet作为backbone;BiFPN作为特征网络,它以backbone的level 3-7特征$\{P_3,P_4,P_5,P_6,P_7\}$作为输入,重复运用top-down和bottom-up双向特征融合。融合后的特征被输入到class/box网络去预测物体类别和bbox。所有level的特征共享同一个class/box网络权重。
Compound Scaling
之前的目标检测网络为了scale up一个baseline detector,通常采用如下几种方式:
- 更大的backbone
- 更大的输入图像尺寸
- 堆叠更多的FPN层
这些方法通常不是最好的,因为它们只关注单个或有限的缩放维度。EfficientNet通过联合scaling up模型的宽度、深度和分辨率,取得了显著的性能增长。受到这个启发,作者提出了一个针对目标检测的Compound Scaling method,使用一个简单的Compound coefficient $\phi$ 联合scale up backbone网络、BIFPN网络、class/box网络以及分辨率。不像EfficientNet中的分类模型,目标检测模型的scaling dimension多得多,所以在所有维度上进行grid search代价太高。因此,作者基于经验设计了这种scaling方法。
Backbone network——复用EfficientNet-B0到B-6的scaling coefficients,这样可以使用在ImageNet上的预训练权重。
BiFPN network——对于BiFPN的深度$D_{bifpn}(#layers)$,采用线性增长的方式;对于宽度$W_{bifpn}(#channels)$,作者采用和EfficientNet相同的指数增长的形式。然后作者使用grid search在$\{1.2,1.25,1.3,1.35,1.4,1.45\}$之间选取一个最好的$\phi$。BiFPN中宽度和深度的scaling方式可以使用下面方程:
Box/class prediction network——固定他们的宽度和BiFPN相同,但是深度线性增长:
Input image resolution——因为BiFPN了feature level 3-7,所以输入分辨率必须能够被$2^7=128$整除,所以作者使用下面方程线性增长分辨率:
根据方程(1)~(3),使用不同的$\phi$,如表1所示,可以得到EfficientNet-D0($\phi=0$)到D7($\phi=7$)不同大小的模型。$D7$和$D6$除了分辨率不同之外,其余结构都相同。
值得注意的是,虽然scaling方法是基于经验提出的,可能不能最优的。但是相比单维度的scaling方法,这种简单的sacling方法也能大幅度提高性能。
实验结果
在单模型、单尺度、没有TTA情况下,在测试集和验证集的表现如表2所示。与以前的目标检测算法相比,在各种精度或资源限制下,EfficientDet实现了更高的效率,参数量小了4-9倍,FLOPs减少了13-42倍。在相对较低的精度范围内,EfficientDet-D0实现了与YOLOv3相似的精度,而FLOPs减少了28倍。EfficientDet-D7得到了state-of-the-art的性能。
除了参数量和FLOPs,作者也比较了在Titan-V GPU和单线程Xeon CPU上的实际推理时间,在batch size=1的情况下跑了10次模型,得到了平均值和标准差,如图4所示。跟之前的检测算法相比,EfficientDet模型在GPU上最高可以提速4.1倍,在CPU上最高可以提高10.8倍,证明了算法在实际硬件上也很高效。
Ablation Study
Disentangling Backbone and BiFPN
因为EfficientDet使用了一个powerful backbone和BiFPN,为了更好的理解他们单独对性能的提升。表4比较了backbone和BiFPN的影响。使用RetinaNet检测器(backbone是ResNet-50,采用了FPN结构)作为baseline。首先将backbone替换为了EfficientNet-B3,精度提高了3AP,参数量和FLOPs有轻微下降。更进一步将FPN替换为BiFPN,精度进一步提高了4AP,参数量和FLOPs大幅度降低(猜测深度可分离卷积的作用)。该结果表明EfficientNet backbones和BiFPN对最终的模型效率和精度提升都很重要。
BiFPN Cross-Scale Connections
表5列出了图2中不同的特征融合方式的模型精度和复杂度。值得注意的是,原始FPN只有一个top-down或者bottom-up路径,为了公平的对比,作者重复这些模块多次,然后将所有的卷积替换为了深度可分离卷积。并使用相同的backbone和class/box预测网络。由此可见,标准的top-down FPN受单向信息流(路径)的限制,精度最低。虽然重复FPN+PANet实现的精度略高于NASFPN[8],但它也需要更多的参数和FLOPs。BiFPN实现了与重复FPN+PANet类似的精度,但使用的参数和FLOPs要少得多。通过额外的加权特征融合,我们的BiFPN以更少的参数和FLOPs进一步获得了最好的准确率。
Softmax vs Fast Normalized Fusion
表6比较了三种不同的目标检测模型中对比了Softmax和fast normalized fusion方法。结果表明,fast normalized fusion方法达到了与softmax-based fusion相似的精度,但在GPU上的运行速度要快1.26~1.31倍。
Compound Scaling
图6将我们的compound scaling与其他scale up单个维度(分辨率/深度/宽度)的方法进行了比较。所提的compound scaling方法比其他方法获得了更好的结果,表明了平衡不同维度来进行联合缩放的好处。
总结
作者从目标检测网络的两大挑战——如何更好的融合不同尺度的特征以及如何scale up目标检测模型入手。分别提出了加权BiFPN结构和针对目标检测的compound scaling method。结合目前最强大的backbone——EfficientNet,得到了目前最好的目标检测模型——EfficientDet。